/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uerj.jms.usuario;

import br.uerj.bean.FeedsBean;
import java.util.List;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author Felipe Ribeiro
 */
public class SubscriberUsuario {

    public static String receberMensagem() throws NamingException, JMSException {

        // Instancia um serviço de nomes - JNDI
        InitialContext ic = new InitialContext();
        // Acesso à fábrica de conexões JMS
        TopicConnectionFactory factory = (TopicConnectionFactory) ic.lookup("jms/Fabrica");
        // Inscrição no tópico JMS
        Topic topic = (Topic) ic.lookup("jms/tabelas");
        // Estabelece a conexão JMS
        TopicConnection connection = factory.createTopicConnection();
        // Cria uma sessão JMS
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // Variável que irá comsumir as mensagens
        MessageConsumer receiver = session.createConsumer(topic, "(modo = 'resposta')");
        // Inicializa a conexão
        connection.start();
        // Aguardando mensagens
        System.out.println("LOG: Usuário aguardando mensagens...");
        // Recebendo as mensagens
        TextMessage message = (TextMessage) receiver.receive();

        StringBuffer sb = new StringBuffer();
        while (message != null) {
            String m = message.getText();
            sb.append(m);
            message = (TextMessage) receiver.receive(1000);
        }

        // fechando
        receiver.close();
        session.close();
        connection.close();

        return sb.toString();
    }

    public static List<FeedsBean> receberMensagemObjectMessage() throws NamingException, JMSException {
        List<FeedsBean> lista = null;
        try {
            System.out.println("entrei aqui no receberMensagemObjectMessage");
            // Instancia um serviço de nomes - JNDI
            InitialContext ic = new InitialContext();
            // Acesso à fábrica de conexões JMS
            TopicConnectionFactory factory = (TopicConnectionFactory) ic.lookup("jms/Fabrica");
            // Inscrição no tópico JMS
            Topic topic = (Topic) ic.lookup("jms/tabelas");
            // Estabelece a conexão JMS
            TopicConnection connection = factory.createTopicConnection();
            // Cria uma sessão JMS
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            // Variável que irá comsumir as mensagens
            MessageConsumer receiver = session.createConsumer(topic, "(modo = 'resposta')");
            // Inicializa a conexão
            connection.start();
            // Aguardando mensagens
            System.out.println("LOG: Usuário aguardando mensagens...");
            // Recebendo as mensagens
            System.out.println("recebendo lista");
            ObjectMessage om = (ObjectMessage) receiver.receive();
            lista = (List<FeedsBean>) om.getObject();
            System.out.println(lista.size());
            System.out.println("carregou a lista");
            for (FeedsBean b : lista) {
                System.out.println(String.format("%s %s %s %s %s", b.getId(), b.getPalavrachave(), b.getResumo(), b.getTitulo(), b.getUrl()));
            }
            System.out.println("recebi lista");
            // fechando
            receiver.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lista;
    }
}
